package gzhaoku.com.common;

import android.util.Log;

public class Logger {

    private String tag;

    public Logger(String tag){
        this.tag = tag;
    }

    /**
     * Log.i的输出为绿色，一般提示性的消息information
     * @param msg
     * @param objects
     * @return
     */
    public Logger i(String msg, Object...objects ){
        if(msg == null){
            Log.i(tag, "null");
        }
        try{
            Log.i(tag, String.format(msg, objects));
        }catch (Exception e){
            Log.i(tag, msg);
        }

        return this;
    }

    /**
     * Log.v 的调试颜色为黑色的，任何消息都会输出，这里的v代表verbose啰嗦的意思
     * @param msg
     * @param objects
     * @return
     */
    public Logger v(String msg, Object...objects ){
        if(msg == null){
            Log.v(tag, "null");
        }
        Log.v(tag, String.format(msg, objects));
        return this;
    }

    /**
     * Log.d的输出颜色是蓝色的，仅输出debug调试的意思，但他会输出上层的信息，过滤起来可以通过DDMS的Logcat标签来选择.
     * @param msg
     * @param objects
     * @return
     */
    public Logger d(String msg, Object...objects ){
        if(msg == null){
            Log.d(tag, "null");
        }
        Log.d(tag, String.format(msg, objects));
        return this;
    }

    /**
     * Log.w的意思为橙色，可以看作为warning警告，一般需要我们注意优化Android代码，同时选择它后还会输出Log.e的信息。
     * @param msg
     * @param objects
     * @return
     */
    public Logger w(String msg, Object...objects ){
        if(msg == null){
            Log.w(tag, "null");
        }
        Log.w(tag, String.format(msg, objects));
        return this;
    }

    /**
     * Log.e为红色，可以想到error错误，这里仅显示红色的错误信息，这些错误就需要我们认真的分析，查看栈的信息了。
     * @param e
     * @return
     */
    public Logger e(Throwable e){
        if(e == null){
            Log.e(tag, "null", e);
        }
        Log.e(tag, "" ,e);
        return this;
    }

    /**
     * Log.e为红色，可以想到error错误，这里仅显示红色的错误信息，这些错误就需要我们认真的分析，查看栈的信息了。
     * @param e
     * @param msg
     * @param objects
     * @return
     */
    public Logger e(Exception e, String msg, Object...objects){
        if(msg == null){
            Log.e(tag, "null", e);
        }
        Log.e(tag, String.format(msg, objects), e);
        return this;
    }

    public static Logger getLog(Object obj){
        String tag = null;
        if(obj == null){
            tag = "DEFAULT";
        }if(obj instanceof String){
            tag = obj.toString();
        }else if(obj instanceof Class){
            tag = ((Class)obj).getCanonicalName();
        }else{
            tag = obj.getClass().getCanonicalName();
        }
        return new Logger(tag);
    }
}
